home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-09-24 | 3.1 KB | 179 lines | [TEXT/CWIE] |
- // COPYRIGHT 1994 A.D. Software, All rights reserved
-
- // public layer of OOFILE database - database views
-
- #include "oof3.hpp" // knows a bit about fields
- #include "oofrel.hpp" // knows about relations
- #include "oofview.hpp"
-
- // -------------------------------------------------------
- // d b V i e w
- // -------------------------------------------------------
-
- dbView::dbView(dbTable* tbl)
- {
- mSource = new dbSourceTable(tbl);
- assert(mSource);
- }
-
-
- dbView::dbView(dbTable& tbl)
- {
- mSource = new dbSourceTable(&tbl);
- assert(mSource);
- }
-
-
- dbView::dbView(dbRelRefBase* tblRef)
- {
- mSource = new dbSourceRelTable(tblRef);
- assert(mSource);
- }
-
-
- dbView::dbView(dbRelRefBase& tblRef)
- {
- mSource = new dbSourceRelTable(&tblRef);
- assert(mSource);
- }
-
-
- dbView::dbView(const dbView& rhs) :
- OOF_Dictionary(rhs)
- {
- mSource = rhs.mSource->clone();
- }
-
-
- const dbView& dbView::operator=(const dbView& rhs)
- {
- if (this == &rhs)
- return *this;
-
- delete mSource;
- mSource = rhs.mSource->clone();
- return *this;
- }
-
-
- dbView::~dbView()
- {
- delete mSource;
- }
-
-
- dbField& dbView::field(unsigned int fieldNoInView)
- {
- dbField* theField = (dbField*) item(fieldNoInView); // safe downcast
- return *theField;
- }
-
-
- ostream& operator<<(ostream& os, dbView& theView)
- {
- theView.source()->start();
- unsigned long numRecs = theView.source()->count();
- unsigned int numFields = theView.count();
- for (unsigned long row=0; row<numRecs; row++) { // iterate through records (vertical)
- for (unsigned int col=0; col<numFields; col++) { // start field iteration (horizontal)
- dbField *theField = (dbField *) theView[col]; // safe downcast
- theField->extract(os);
- os << '\t';
- }
- os << endl;
- theView.source()->next();
- }
- return os;
- }
-
-
-
- // -------------------------------------------------------
- // d b S o u r c e T a b l e
- // -------------------------------------------------------
- dbSource* dbSourceTable::clone() const
- {
- return new dbSourceTable(*this);
- }
-
-
- void dbSourceTable::next()
- {
- mTable->next();
- }
-
-
- unsigned long dbSourceTable::count()
- {
- return mTable->count();
- }
-
-
- void dbSourceTable::saveRecord()
- {
- mTable->saveRecord();
- }
-
-
- void dbSourceTable::newRecord()
- {
- mTable->newRecord();
- }
-
-
- bool dbSourceTable::gotoRelativeRecord(unsigned long recNo)
- {
- return mTable->gotoRelativeRecord(recNo);
- }
-
-
- // -------------------------------------------------------
- // d b S o u r c e R e l T a b l e
- // -------------------------------------------------------
- void dbSourceRelTable::start()
- {
- mTableRef->start();
- }
-
-
- bool dbSourceRelTable::more()
- {
- return mTableRef->more();
- }
-
-
- void dbSourceRelTable::next()
- {
- mTableRef->next();
- }
-
-
- unsigned long dbSourceRelTable::count()
- {
- return mTableRef->count();
- }
-
-
- void dbSourceRelTable::saveRecord()
- {
- dbConnect::raise("saveRecord has been called on a view which has a dbSourceRelTable");
- }
-
-
- void dbSourceRelTable::newRecord()
- {
- mTableRef->newRecord();
- }
-
-
- dbSource* dbSourceRelTable::clone() const
- {
- return new dbSourceRelTable(*this);
- }
-
-
- bool dbSourceRelTable::gotoRelativeRecord(unsigned long recNo)
- {
- return mTableRef->gotoRelativeRecord(recNo);
- }
-